#ifndef _M_MYLOG_H_
#define _M_MYLOG_H_
#include "logger.hpp"
namespace mylog{
/*1.用户获取指定日志器的全局接口*/
Logger::ptr getLogger(const std::string &name){
    return LoggerManager::getInstance().getLogger(name);
}
Logger::ptr rootLogger(){
    return LoggerManager::getInstance().rootLogger();
}
/*2.使用宏函数对日志器的接口进行代理（代理模式）,用户使用小写的需要自己获取需要的日志器*/
//void error(const std::string &file,size_t line,const std::string &fmt,...)
#define debug(fmt,...) debug(__FILE__,__LINE__,fmt,##__VA_ARGS__)//把 __FILE____LINE__自动添加到调试信息里，并且支持可变参数
#define info(fmt,...) info(__FILE__,__LINE__,fmt,##__VA_ARGS__)
#define warn(fmt,...) warn(__FILE__,__LINE__,fmt,##__VA_ARGS__)
#define error(fmt,...) error(__FILE__,__LINE__,fmt,##__VA_ARGS__)
#define fatal(fmt,...) fatal(__FILE__,__LINE__,fmt,##__VA_ARGS__)

/*3.用户可通过默认root日志器进行日志的标准输出打印*/
#define DEBUG(fmt,...) mylog::rootLogger()->debug(fmt,##__VA_ARGS__)  //注意宏替换后不要漏命名空间
#define INFO(fmt,...) mylog::rootLogger()->info(fmt,##__VA_ARGS__)
#define WARN(fmt,...) mylog::rootLogger()->warn(fmt,##__VA_ARGS__)
#define ERROR(fmt,...) mylog::rootLogger()->error(fmt,##__VA_ARGS__)
#define FATAL(fmt,...) mylog::rootLogger()->fatal(fmt,##__VA_ARGS__)
}

/*前面写 ... 是为了声明宏接受可变参数，后面写 ##__VA_ARGS__ 是为了正确传递可变参数并处理可能出现的多余逗号问题。*/
#endif